<?php

declare(strict_types=1);

namespace app\model;

use app\common\facade\auth\Auth;
use think\model\concern\SoftDelete;

/**
 * 
 *
 * @mixin \think\Model
 * @property int $id
 * @property int $agent_id
 * @property bool $status 状态
 * @property bool $serv_type 业务类型 1 话费 2 加油 3权益 4外卖 5电影 6美团到店 7油卡 8电费。详见constant配置
 * @property float $value 举例：取值8，预付表示2折和返佣表示2%。该字段有可能改成varchar，sql运算慎重
 * @property int $time_begin 有效期 开始
 * @property string $created_at 创建时间
 * @property string $updated_at 更新时间
 * @property string $deleted_at
 * @property int $time_end 有效期结束
 * @property float $discount_slow 慢充折扣
 * @property float $discount_fast 快充折扣
 * @property int $agent_lower_price 代理商销售价能否低于成本价：0不能 1能
 * @property string $discount_slow_all 慢充折扣【区分运营商】1移动 2联通 3电信
 * @property string $discount_fast_all 快充折扣【区分运营商】1移动 2联通 3电信
 * @property int $income_type 结算类型1返佣 2接口
 * @method static \think\db\Query onlyTrashed()
 * @method static \think\db\Query withTrashed()
 */
class AgentServiceConfig extends CommonModel
{

    const INCOME_TYPE_REBATE = 1; //返佣
    const INCOME_TYPE_SELF = 2; //代理商自己配置的秘钥

    const STATUS_CLOSE = 0;
    const STATUS_ACTIVE = 1;
    const STATUS_STOP = 2;
    const STATUS_DELETE = 0;


    use SoftDelete;

    /*
     删除后删除相关 代理业务 的供应商
    */
    public static function onAfterDelete($model)
    {
        AgentSupplier::where('agent_id', $model->agent_id)->delete();
    }


    /**
     *
     * [1]=>
     * string(6) "话费"
     * [2]=>
     * string(12) "滴滴加油"
     * [3]=>
     * string(6) "权益"
     * [5]=>
     * string(9) "电影票"
     *
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function getAllServOrHistory()
    {
        $servs = $this
            ->getAgentAllConfigQuery()
            ->select()
            ->toArray();

        $res = [];

        foreach ($servs as $serv) {
            if (empty(PRODUCT_SERV_TYPE[$serv['serv_type']])) continue;
            $res[$serv['serv_type']] = PRODUCT_SERV_TYPE[$serv['serv_type']]['name'];
        }

        //这边有一个话费难受  不是coupon_order 这张表的
        if (empty($res[PRODUCT_MOBILE_SERV])) {
            //查一下话费是否有订单
            $mobile = MobileOrder::query()->where('agent_id', Auth::agentId())->find();
            if (!empty($mobile)) {
                $res[PRODUCT_COUPON_SERV] = '话费';
            }
        }

        return $res;
    }

    /**
     * 获取包含历史订单的服务查询 的query
     */
    public function getAgentAllConfigQuery()
    {

        $agent_id = Auth::agentId();

        $query = AgentServiceConfig::query()
            ->union(\app\model\CouponOrder::query()->field('serv_type')->where('agent_id', $agent_id)->group('serv_type')->buildSql())
            ->field('serv_type')
            ->where('agent_id', $agent_id)
            ->where('status', AgentServiceConfig::STATUS_ACTIVE);

        return $query;
    }


}
